import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
// 引入初始化css
import '@/assets/css/base.css'
// 引入element-ui
import './plugins/element'
// 引入小图标样式
import '@/assets/css/iconfont.css'
// 引入公共样式
import './assets/css/common.css'
// 懒加载
import VueLazyload from 'vue-lazyload'
// 引入axios
import axios from 'axios'
Vue.config.productionTip = false
Vue.prototype.$http = axios
Vue.use(VueLazyload)
Vue.use(VueLazyload, {
  preLoad: 1.3,
  error: '@/assets/img/error.png',
  loading: '@/assets/img/load.gif',
  attempt: 1
})
// 设置请求字段
axios.interceptors.request.use(config => {
  const tokenStr = window.sessionStorage.getItem('token')
  if (tokenStr) {
    // 表示用户已经登录
    config.headers.Authorization = window.sessionStorage.getItem('token')
  }
  return config
}, error => {
  return Promise.reject(error)
})
// 路由守卫
router.beforeEach((to, from, next) => {
  const tokenStr = window.sessionStorage.getItem('token')
  // 判断该路由是否需要登录权限
  // 数据持久化存储
  axios.post('/api/validate', {}).then(res => {
    if (res.data.state !== 1) {
      if (to.meta.requireAuth) {
        // 判断本地是否存储token
        if (tokenStr) {
          next()
        } else {
          // 没有token
          next({
            path: '/login'
          })
        }
      } else {
        next()
      }
    } else {
      // 登陆成功保存用户信息
      store.commit('USERINFO', {
        userInfo: res.data
      })
      // 放行
      next()
    }
  }).catch(err => {
    console.log(err)
    next()
  })
  // /*如果本地 存在 token 则 不允许直接跳转到 登录页面*/
  if (to.fullPath === '/login') {
    if (tokenStr) {
      next({
        path: from.fullPath
      })
    } else {
      next()
    }
  }
})
new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
